package com.example.design.item.vistor;

import com.example.design.item.composite.AbstractProductItem;
import com.example.design.item.composite.ProductComposite;
import com.example.design.utils.RedisUtils;
import jdk.nashorn.internal.ir.IfNode;
import jdk.nashorn.internal.ir.annotations.Ignore;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

//访问者模式——Concrete Visitor 具体访问者
@Component
public class AddItemVisitor implements ItemVisitor<ProductComposite>{

    @Resource
    private RedisUtils redisUtils;

    @Override
    public ProductComposite visit(AbstractProductItem productItem) {
        //从 redis 获取当前缓存数据（商品类目树形结构数据）
        ProductComposite productComposite = (ProductComposite) redisUtils.get("items");
        //需要新增的商品类目
        ProductComposite addProductItem = (ProductComposite)productItem;
        //如果新增的节点的父节点为当前节点，则直接添加。
        if (addProductItem.getPid() == productComposite.getId()){
            productComposite.add(addProductItem);
            return productComposite;
        }
        //通过 addChild 方法进行递归操作寻找新增类目的插入点
        addChild(addProductItem,productComposite);
        return productComposite;
    }

    //归操作寻找新增类目的插入点
    private void addChild(ProductComposite addProductItem, ProductComposite currComposite) {
        for (AbstractProductItem abstractProductItem : currComposite.getChild()) {
            ProductComposite item = (ProductComposite)abstractProductItem;
            if (item.getId() == addProductItem.getPid()){
                item.add(addProductItem);
            }else {
                addChild(addProductItem,item);
            }
        }
    }
}
